package com.shenzhenai.it_hei_ma_threadpoor.a02threadpoor2;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * @author huangzehui
 * @date 2/9/2025 下午11:08 周二
 * @description
 *
 * 多线程&JUC-30-自定义线程池超详细解析
 * https://www.bilibili.com/video/BV1LG4y1T7n2?spm_id_from=333.788.videopod.episodes&vd_source=e07cc8cc94eb22bd76722071b03cd199&p=30
 *
 */
public class MyThreadPoolDemo1 {


    public static void main(String[] args) {
        /**
         * ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor
         * （核心线程数量，最大线程数量，空闲线程最大存活时间，任务队列，创建线程工厂，任务的拒绝策略）；
         * 参数一：核心线程数量  不能小于0
         * 参数二：最大线程数 不能小于等于0，最大数量>=核心线程数量
         * 参数三：空闲线程最大存活时间 不能小于0
         * 参数四：时间单位 用TimeUnit指定
         * 参数五：任务队列 不能为null
         * 参数六：创建线程工厂 不能为null
         * 参数七：任务的拒绝策略 不能为null
         */

        ThreadPoolExecutor pool = new ThreadPoolExecutor(
                3, // 核心线程数量  不能小于0
                6, // 最大线程数 不能小于等于0，最大数量>=核心线程数量
                60, // 空闲线程最大存活时间 不能小于0
                TimeUnit.SECONDS, // 时间单位 用TimeUnit指定
                new ArrayBlockingQueue<>(3), // 任务队列 不能为null
                Executors.defaultThreadFactory(), // 创建线程工厂 不能为null
                new ThreadPoolExecutor.AbortPolicy() // 任务的拒绝策略 不能为null
        );

        pool.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello pool");
            }
        });

    }

}
